// Photoshop 脚本自动更新功能 (ExtendScript 兼容版)
// 文件名: main.jsx
// 仓库: https://gitee.com/bbbbio/ps-script-auto-update

// 从当前脚本路径定位 version.json
var scriptFile = new File($.fileName);
var versionFile = new File(scriptFile.path + "/version.json");

// 当前脚本版本
var currentVersion = "1.0.0"; // 默认值（如果读取失败则使用）

// 尝试读取同目录下的 version.json
if (versionFile.exists) {
    try {
        versionFile.open('r');
        var content = versionFile.read();
        versionFile.close();
        var versionInfo = eval("(" + content + ")");
        if (versionInfo && versionInfo.version) {
            currentVersion = versionInfo.version;
        }
    } catch(e) {
        $.writeln("无法读取本地version.json: " + e);
    }
}

// 主入口
function main() {
    // 创建UI界面
    var win = new Window("dialog", "PS脚本自动更新 v" + currentVersion, undefined);
    win.orientation = "column";
    win.alignChildren = "center";
    
    // 添加说明文本
    var text = win.add("statictext", undefined, "当前版本: " + currentVersion);
    text.alignment = "center";
    
    // 添加检查更新按钮
    var checkUpdateBtn = win.add("button", undefined, "检查更新", {alignment: "center"});
    checkUpdateBtn.size = [100, 30];
    
    // 添加关闭按钮
    var closeBtn = win.add("button", undefined, "关闭", {alignment: "center"});
    closeBtn.size = [100, 30];
    
    // 按钮事件
    checkUpdateBtn.onClick = function() {
        checkForUpdates();
    };
    
    closeBtn.onClick = function() {
        win.close();
    };
    
    win.show();
}

// 检查更新函数
function checkForUpdates() {
    try {
        var tempFolder = Folder.temp;
        var tempFile = new File(tempFolder + "/ps_script_version.json");
        
        // Gitee 原始文件URL
        var versionFileUrl = "https://gitee.com/bbbbio/ps-script-auto-update/raw/master/version.json";
        
        // 使用系统curl命令下载（兼容性最好）
        var curlCommand = 'curl -L -o "' + tempFile.fsName + '" "' + versionFileUrl + '"';
        app.system(curlCommand);
        
        // 等待下载完成（单位：毫秒）
        waitForFile(tempFile, 3000);
        
        if (tempFile.exists) {
            tempFile.open('r');
            var content = tempFile.read();
            tempFile.close();
            
            // ExtendScript 兼容的JSON解析
            var versionInfo;
            try {
                versionInfo = eval("(" + content + ")");
            } catch(e) {
                throw new Error("版本文件解析失败: " + e.message);
            }
            
            // 验证版本信息
            if (!versionInfo || !versionInfo.version) {
                throw new Error("版本文件缺少版本信息");
            }
            
            // 比较版本
            var remoteVersion = versionInfo.version.toString();
            var result = compareVersions(currentVersion, remoteVersion);
            
            if (result < 0) {
                // 有新版本
                var updateMsg = "发现新版本 " + remoteVersion + 
                              "\n当前版本: " + currentVersion +
                              "\n\n更新说明: " + (versionInfo.description || "暂无说明");
                
                if (confirm(updateMsg + "\n\n是否立即更新?", true, "更新可用")) {
                    downloadUpdate(versionInfo.downloadUrl);
                }
            } else {
                alert("您已经使用的是最新版本 (" + currentVersion + ")", "无更新");
            }
        } else {
            throw new Error("无法下载版本信息文件");
        }
    } catch(e) {
        alert("检查更新时出错:\n" + e.message, "错误", true);
    }
}

// 下载更新函数
function downloadUpdate(downloadUrl) {
    try {
        var scriptFile = new File($.fileName);
        var scriptFolder = scriptFile.path;
        var tempFolder = Folder.temp;
        
        // 1. 下载新版脚本
        var tempScript = new File(tempFolder + "/ps_script_update_temp.jsx");
        var curlCommand = 'curl -L -o "' + tempScript.fsName + '" "' + downloadUrl + '"';
        app.system(curlCommand);
        waitForFile(tempScript, 5000);

        // 2. 下载新版version.json（从相同目录）
        var versionFileUrl = downloadUrl.replace(/main\.jsx$/, 'version.json');
        var tempVersion = new File(tempFolder + "/ps_script_version_temp.json");
        curlCommand = 'curl -L -o "' + tempVersion.fsName + '" "' + versionFileUrl + '"';
        app.system(curlCommand);
        waitForFile(tempVersion, 5000);

        // 验证文件
        if (!tempScript.exists || !tempVersion.exists) {
            throw new Error("文件下载不完整");
        }

        // 创建备份（可选）
        var backupFolder = new Folder(scriptFolder + "/backup");
        if (!backupFolder.exists) backupFolder.create();
        var timestamp = new Date().getTime();
        scriptFile.copy(new File(backupFolder + "/main_" + timestamp + ".jsx"));
        new File(scriptFolder + "/version.json").copy(new File(backupFolder + "/version_" + timestamp + ".json"));

        // 替换文件
        tempScript.copy(scriptFile);
        tempVersion.copy(new File(scriptFolder + "/version.json"));

        alert("更新成功完成！\n旧版本已备份至backup文件夹", "更新完成");

    } catch(e) {
        alert("更新失败: " + e.message, "错误", true);
    } finally {
        // 清理临时文件
        if (tempScript && tempScript.exists) tempScript.remove();
        if (tempVersion && tempVersion.exists) tempVersion.remove();
    }
}
// 完全兼容的版本比较函数
function compareVersions(v1, v2) {
    // 确保是字符串
    v1 = v1.toString().replace(/[^\d.]/g, '');
    v2 = v2.toString().replace(/[^\d.]/g, '');
    
    var parts1 = v1.split('.');
    var parts2 = v2.split('.');
    
    // 比较每个部分
    var maxLength = Math.max(parts1.length, parts2.length);
    for (var i = 0; i < maxLength; i++) {
        var num1 = parseInt(parts1[i], 10) || 0;
        var num2 = parseInt(parts2[i], 10) || 0;
        
        if (num1 < num2) return -1;
        if (num1 > num2) return 1;
    }
    
    return 0;
}

// 等待文件创建/下载完成
function waitForFile(file, timeoutMs) {
    var start = new Date().getTime();
    while (!file.exists) {
        $.sleep(200);
        if (new Date().getTime() - start > timeoutMs) {
            throw new Error("等待文件超时");
        }
    }
}

// 启动脚本
main();